/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package models;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author 40800431
 */
public class Cronograma {
    
    private Date dataInicio;
    private Date dataTermino;
    private String nome;
    private int totalHoras;
    private Projeto projeto;
    private int id;

    public Cronograma(String nomeCronograma) {
        this.load(nomeCronograma);
    }
    
    public Cronograma(){}

    /**
     * @return the dataInicio
     */
    public Date getDataInicio() {
        return dataInicio;
    }

    /**
     * @param dataInicio the dataInicio to set
     */
    public void setDataInicio(Date dataInicio) {
        this.dataInicio = dataInicio;
    }
    
    public void setDataInicio(String dataInicio){
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            this.dataInicio = format.parse(dataInicio);
        } catch (ParseException ex) {
            Logger.getLogger(Cronograma.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @return the dataTermino
     */
    public Date getDataTermino() {
        return dataTermino;
    }

    /**
     * @param dataTermino the dataTermino to set
     */
    public void setDataTermino(Date dataTermino) {
        this.dataTermino = dataTermino;
    }
    
    public void setDataTermino(String dataTermino){
        try {
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            this.dataTermino = format.parse(dataTermino);
        } catch (ParseException ex) {
            Logger.getLogger(Cronograma.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public boolean insert() {
        String queryString = "INSERT INTO Cronogramas (data_inicio, data_termino, total_horas, nome, projeto) VALUES ";
        queryString += "('" + this.getDataInicioString() + "', '" + this.getDataInicioString() + "', '" + this.getTotal_horas() + "', '" + this.getNome() +  "', " + this.projeto.getId() + " )";
        
        Database db = new Database();
        db.connect();
        int cronogramaId = db.executeUpdate(queryString);
        db.disconnect();
        
        this.setId(cronogramaId);
        
        return true;
    }
    
     public static String[] listByProject(String projectName) {
        Database db = new Database();
        String[] taskList;
        db.connect();
        
        int rowCount = 0;
                
        try {
            db.query("SELECT count(*) FROM Cronogramas "
                    + "INNER JOIN Projetos ON Cronogramas.projeto = Projetos.id_projeto "
                    + "WHERE Projetos.nome = '" + projectName + "';");
            
            db.res.next();
            rowCount = db.res.getInt(1);
            
            db.query("SELECT * FROM Cronogramas "
                    + "INNER JOIN Projetos ON Cronogramas.projeto = Projetos.id_projeto "
                    + "WHERE Projetos.nome = '" + projectName + "';");
        
            taskList = new String[rowCount];
            for(int i = 0; i < rowCount; i++){
                db.res.next();
                taskList[i] = db.res.getString("nome");
            }

            db.disconnect();
            
            return taskList;
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return null;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the totalHoras
     */
    public int getTotal_horas() {
        return totalHoras;
    }

    /**
     * @param totalHoras the totalHoras to set
     */
    public void setTotal_horas(int total_horas) {
        this.totalHoras = total_horas;
    }

    /**
     * @return the projeto
     */
    public Projeto getProjeto() {
        return projeto;
    }

    /**
     * @param projeto the projeto to set
     */
    public void setProjeto(Projeto projeto) {
        this.projeto = projeto;
    }

    public void setId(int id) {
        this.id = id;
    }
    
    public int getId(){
        return this.id;
    }

    private String getDataInicioString() {
        DateFormat stringFormat = new SimpleDateFormat("yyyy/MM/dd");
        return stringFormat.format(this.dataInicio);
    }
    
    private String getDataTerminoString(){
        DateFormat stringFormat = new SimpleDateFormat("yyyy/MM/dd");
        return stringFormat.format(this.dataTermino);
    }
    
    public void load(String cronName) {
        String sqlQuery = "SELECT * FROM Cronogramas WHERE Cronogramas.nome = '" + cronName + "' AND Cronogramas.projeto = " + this.getProjeto().getId() + " LIMIT 1";
        
        Database db = new Database();
        db.connect();
        db.query(sqlQuery);
        
       try{
            db.res.next();
            this.setDataInicio(db.res.getString("data_inicio"));
            this.setDataTermino(db.res.getString("data_termino"));
            this.setTotal_horas(db.res.getInt("total_horas"));
            this.setNome(db.res.getString("nome"));
            this.setProjeto(new Projeto(db.res.getInt("Projeto")));
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            db.disconnect();
        }
    }
    
}
